/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package EA_Model.IEC61970.Generation.GenerationDynamics.impl;

import EA_Model.IEC61970.Domain.ActivePower;
import EA_Model.IEC61970.Domain.PU;
import EA_Model.IEC61970.Domain.RotationSpeed;
import EA_Model.IEC61970.Domain.Seconds;

import EA_Model.IEC61970.Generation.GenerationDynamics.GenerationDynamicsPackage;
import EA_Model.IEC61970.Generation.GenerationDynamics.HydroTurbine;
import EA_Model.IEC61970.Generation.GenerationDynamics.TurbineType;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Hydro Turbine</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getGateRateLimit <em>Gate Rate Limit</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getGateUpperLimit <em>Gate Upper Limit</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getMaxHeadMaxP <em>Max Head Max P</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getMinHeadMaxP <em>Min Head Max P</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getSpeedRating <em>Speed Rating</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getSpeedRegulation <em>Speed Regulation</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getTransientDroopTime <em>Transient Droop Time</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getTransientRegulation <em>Transient Regulation</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getTurbineRating <em>Turbine Rating</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getTurbineType <em>Turbine Type</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.GenerationDynamics.impl.HydroTurbineImpl#getWaterStartingTime <em>Water Starting Time</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class HydroTurbineImpl extends PrimeMoverImpl implements HydroTurbine {
	/**
	 * The cached value of the '{@link #getGateRateLimit() <em>Gate Rate Limit</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getGateRateLimit()
	 * @generated
	 * @ordered
	 */
	protected EA_Model.IEC61970.Domain.Float gateRateLimit;

	/**
	 * The cached value of the '{@link #getGateUpperLimit() <em>Gate Upper Limit</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getGateUpperLimit()
	 * @generated
	 * @ordered
	 */
	protected PU gateUpperLimit;

	/**
	 * The cached value of the '{@link #getMaxHeadMaxP() <em>Max Head Max P</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMaxHeadMaxP()
	 * @generated
	 * @ordered
	 */
	protected ActivePower maxHeadMaxP;

	/**
	 * The cached value of the '{@link #getMinHeadMaxP() <em>Min Head Max P</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMinHeadMaxP()
	 * @generated
	 * @ordered
	 */
	protected ActivePower minHeadMaxP;

	/**
	 * The cached value of the '{@link #getSpeedRating() <em>Speed Rating</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpeedRating()
	 * @generated
	 * @ordered
	 */
	protected RotationSpeed speedRating;

	/**
	 * The cached value of the '{@link #getSpeedRegulation() <em>Speed Regulation</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSpeedRegulation()
	 * @generated
	 * @ordered
	 */
	protected PU speedRegulation;

	/**
	 * The cached value of the '{@link #getTransientDroopTime() <em>Transient Droop Time</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTransientDroopTime()
	 * @generated
	 * @ordered
	 */
	protected Seconds transientDroopTime;

	/**
	 * The cached value of the '{@link #getTransientRegulation() <em>Transient Regulation</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTransientRegulation()
	 * @generated
	 * @ordered
	 */
	protected PU transientRegulation;

	/**
	 * The cached value of the '{@link #getTurbineRating() <em>Turbine Rating</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTurbineRating()
	 * @generated
	 * @ordered
	 */
	protected ActivePower turbineRating;

	/**
	 * The default value of the '{@link #getTurbineType() <em>Turbine Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTurbineType()
	 * @generated
	 * @ordered
	 */
	protected static final TurbineType TURBINE_TYPE_EDEFAULT = TurbineType.FRANCIS;

	/**
	 * The cached value of the '{@link #getTurbineType() <em>Turbine Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTurbineType()
	 * @generated
	 * @ordered
	 */
	protected TurbineType turbineType = TURBINE_TYPE_EDEFAULT;

	/**
	 * The cached value of the '{@link #getWaterStartingTime() <em>Water Starting Time</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getWaterStartingTime()
	 * @generated
	 * @ordered
	 */
	protected Seconds waterStartingTime;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected HydroTurbineImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return GenerationDynamicsPackage.Literals.HYDRO_TURBINE;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float getGateRateLimit() {
		if (gateRateLimit != null && gateRateLimit.eIsProxy()) {
			InternalEObject oldGateRateLimit = (InternalEObject)gateRateLimit;
			gateRateLimit = (EA_Model.IEC61970.Domain.Float)eResolveProxy(oldGateRateLimit);
			if (gateRateLimit != oldGateRateLimit) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__GATE_RATE_LIMIT, oldGateRateLimit, gateRateLimit));
			}
		}
		return gateRateLimit;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EA_Model.IEC61970.Domain.Float basicGetGateRateLimit() {
		return gateRateLimit;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setGateRateLimit(EA_Model.IEC61970.Domain.Float newGateRateLimit) {
		EA_Model.IEC61970.Domain.Float oldGateRateLimit = gateRateLimit;
		gateRateLimit = newGateRateLimit;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__GATE_RATE_LIMIT, oldGateRateLimit, gateRateLimit));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PU getGateUpperLimit() {
		if (gateUpperLimit != null && gateUpperLimit.eIsProxy()) {
			InternalEObject oldGateUpperLimit = (InternalEObject)gateUpperLimit;
			gateUpperLimit = (PU)eResolveProxy(oldGateUpperLimit);
			if (gateUpperLimit != oldGateUpperLimit) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__GATE_UPPER_LIMIT, oldGateUpperLimit, gateUpperLimit));
			}
		}
		return gateUpperLimit;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PU basicGetGateUpperLimit() {
		return gateUpperLimit;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setGateUpperLimit(PU newGateUpperLimit) {
		PU oldGateUpperLimit = gateUpperLimit;
		gateUpperLimit = newGateUpperLimit;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__GATE_UPPER_LIMIT, oldGateUpperLimit, gateUpperLimit));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower getMaxHeadMaxP() {
		if (maxHeadMaxP != null && maxHeadMaxP.eIsProxy()) {
			InternalEObject oldMaxHeadMaxP = (InternalEObject)maxHeadMaxP;
			maxHeadMaxP = (ActivePower)eResolveProxy(oldMaxHeadMaxP);
			if (maxHeadMaxP != oldMaxHeadMaxP) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__MAX_HEAD_MAX_P, oldMaxHeadMaxP, maxHeadMaxP));
			}
		}
		return maxHeadMaxP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower basicGetMaxHeadMaxP() {
		return maxHeadMaxP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMaxHeadMaxP(ActivePower newMaxHeadMaxP) {
		ActivePower oldMaxHeadMaxP = maxHeadMaxP;
		maxHeadMaxP = newMaxHeadMaxP;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__MAX_HEAD_MAX_P, oldMaxHeadMaxP, maxHeadMaxP));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower getMinHeadMaxP() {
		if (minHeadMaxP != null && minHeadMaxP.eIsProxy()) {
			InternalEObject oldMinHeadMaxP = (InternalEObject)minHeadMaxP;
			minHeadMaxP = (ActivePower)eResolveProxy(oldMinHeadMaxP);
			if (minHeadMaxP != oldMinHeadMaxP) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__MIN_HEAD_MAX_P, oldMinHeadMaxP, minHeadMaxP));
			}
		}
		return minHeadMaxP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower basicGetMinHeadMaxP() {
		return minHeadMaxP;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMinHeadMaxP(ActivePower newMinHeadMaxP) {
		ActivePower oldMinHeadMaxP = minHeadMaxP;
		minHeadMaxP = newMinHeadMaxP;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__MIN_HEAD_MAX_P, oldMinHeadMaxP, minHeadMaxP));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public RotationSpeed getSpeedRating() {
		if (speedRating != null && speedRating.eIsProxy()) {
			InternalEObject oldSpeedRating = (InternalEObject)speedRating;
			speedRating = (RotationSpeed)eResolveProxy(oldSpeedRating);
			if (speedRating != oldSpeedRating) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_RATING, oldSpeedRating, speedRating));
			}
		}
		return speedRating;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public RotationSpeed basicGetSpeedRating() {
		return speedRating;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpeedRating(RotationSpeed newSpeedRating) {
		RotationSpeed oldSpeedRating = speedRating;
		speedRating = newSpeedRating;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_RATING, oldSpeedRating, speedRating));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PU getSpeedRegulation() {
		if (speedRegulation != null && speedRegulation.eIsProxy()) {
			InternalEObject oldSpeedRegulation = (InternalEObject)speedRegulation;
			speedRegulation = (PU)eResolveProxy(oldSpeedRegulation);
			if (speedRegulation != oldSpeedRegulation) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_REGULATION, oldSpeedRegulation, speedRegulation));
			}
		}
		return speedRegulation;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PU basicGetSpeedRegulation() {
		return speedRegulation;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSpeedRegulation(PU newSpeedRegulation) {
		PU oldSpeedRegulation = speedRegulation;
		speedRegulation = newSpeedRegulation;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_REGULATION, oldSpeedRegulation, speedRegulation));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds getTransientDroopTime() {
		if (transientDroopTime != null && transientDroopTime.eIsProxy()) {
			InternalEObject oldTransientDroopTime = (InternalEObject)transientDroopTime;
			transientDroopTime = (Seconds)eResolveProxy(oldTransientDroopTime);
			if (transientDroopTime != oldTransientDroopTime) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_DROOP_TIME, oldTransientDroopTime, transientDroopTime));
			}
		}
		return transientDroopTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds basicGetTransientDroopTime() {
		return transientDroopTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTransientDroopTime(Seconds newTransientDroopTime) {
		Seconds oldTransientDroopTime = transientDroopTime;
		transientDroopTime = newTransientDroopTime;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_DROOP_TIME, oldTransientDroopTime, transientDroopTime));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PU getTransientRegulation() {
		if (transientRegulation != null && transientRegulation.eIsProxy()) {
			InternalEObject oldTransientRegulation = (InternalEObject)transientRegulation;
			transientRegulation = (PU)eResolveProxy(oldTransientRegulation);
			if (transientRegulation != oldTransientRegulation) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_REGULATION, oldTransientRegulation, transientRegulation));
			}
		}
		return transientRegulation;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PU basicGetTransientRegulation() {
		return transientRegulation;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTransientRegulation(PU newTransientRegulation) {
		PU oldTransientRegulation = transientRegulation;
		transientRegulation = newTransientRegulation;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_REGULATION, oldTransientRegulation, transientRegulation));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower getTurbineRating() {
		if (turbineRating != null && turbineRating.eIsProxy()) {
			InternalEObject oldTurbineRating = (InternalEObject)turbineRating;
			turbineRating = (ActivePower)eResolveProxy(oldTurbineRating);
			if (turbineRating != oldTurbineRating) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_RATING, oldTurbineRating, turbineRating));
			}
		}
		return turbineRating;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ActivePower basicGetTurbineRating() {
		return turbineRating;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTurbineRating(ActivePower newTurbineRating) {
		ActivePower oldTurbineRating = turbineRating;
		turbineRating = newTurbineRating;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_RATING, oldTurbineRating, turbineRating));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TurbineType getTurbineType() {
		return turbineType;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTurbineType(TurbineType newTurbineType) {
		TurbineType oldTurbineType = turbineType;
		turbineType = newTurbineType == null ? TURBINE_TYPE_EDEFAULT : newTurbineType;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_TYPE, oldTurbineType, turbineType));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds getWaterStartingTime() {
		if (waterStartingTime != null && waterStartingTime.eIsProxy()) {
			InternalEObject oldWaterStartingTime = (InternalEObject)waterStartingTime;
			waterStartingTime = (Seconds)eResolveProxy(oldWaterStartingTime);
			if (waterStartingTime != oldWaterStartingTime) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, GenerationDynamicsPackage.HYDRO_TURBINE__WATER_STARTING_TIME, oldWaterStartingTime, waterStartingTime));
			}
		}
		return waterStartingTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Seconds basicGetWaterStartingTime() {
		return waterStartingTime;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setWaterStartingTime(Seconds newWaterStartingTime) {
		Seconds oldWaterStartingTime = waterStartingTime;
		waterStartingTime = newWaterStartingTime;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, GenerationDynamicsPackage.HYDRO_TURBINE__WATER_STARTING_TIME, oldWaterStartingTime, waterStartingTime));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_RATE_LIMIT:
				if (resolve) return getGateRateLimit();
				return basicGetGateRateLimit();
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_UPPER_LIMIT:
				if (resolve) return getGateUpperLimit();
				return basicGetGateUpperLimit();
			case GenerationDynamicsPackage.HYDRO_TURBINE__MAX_HEAD_MAX_P:
				if (resolve) return getMaxHeadMaxP();
				return basicGetMaxHeadMaxP();
			case GenerationDynamicsPackage.HYDRO_TURBINE__MIN_HEAD_MAX_P:
				if (resolve) return getMinHeadMaxP();
				return basicGetMinHeadMaxP();
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_RATING:
				if (resolve) return getSpeedRating();
				return basicGetSpeedRating();
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_REGULATION:
				if (resolve) return getSpeedRegulation();
				return basicGetSpeedRegulation();
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_DROOP_TIME:
				if (resolve) return getTransientDroopTime();
				return basicGetTransientDroopTime();
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_REGULATION:
				if (resolve) return getTransientRegulation();
				return basicGetTransientRegulation();
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_RATING:
				if (resolve) return getTurbineRating();
				return basicGetTurbineRating();
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_TYPE:
				return getTurbineType();
			case GenerationDynamicsPackage.HYDRO_TURBINE__WATER_STARTING_TIME:
				if (resolve) return getWaterStartingTime();
				return basicGetWaterStartingTime();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_RATE_LIMIT:
				setGateRateLimit((EA_Model.IEC61970.Domain.Float)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_UPPER_LIMIT:
				setGateUpperLimit((PU)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__MAX_HEAD_MAX_P:
				setMaxHeadMaxP((ActivePower)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__MIN_HEAD_MAX_P:
				setMinHeadMaxP((ActivePower)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_RATING:
				setSpeedRating((RotationSpeed)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_REGULATION:
				setSpeedRegulation((PU)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_DROOP_TIME:
				setTransientDroopTime((Seconds)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_REGULATION:
				setTransientRegulation((PU)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_RATING:
				setTurbineRating((ActivePower)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_TYPE:
				setTurbineType((TurbineType)newValue);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__WATER_STARTING_TIME:
				setWaterStartingTime((Seconds)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_RATE_LIMIT:
				setGateRateLimit((EA_Model.IEC61970.Domain.Float)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_UPPER_LIMIT:
				setGateUpperLimit((PU)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__MAX_HEAD_MAX_P:
				setMaxHeadMaxP((ActivePower)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__MIN_HEAD_MAX_P:
				setMinHeadMaxP((ActivePower)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_RATING:
				setSpeedRating((RotationSpeed)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_REGULATION:
				setSpeedRegulation((PU)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_DROOP_TIME:
				setTransientDroopTime((Seconds)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_REGULATION:
				setTransientRegulation((PU)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_RATING:
				setTurbineRating((ActivePower)null);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_TYPE:
				setTurbineType(TURBINE_TYPE_EDEFAULT);
				return;
			case GenerationDynamicsPackage.HYDRO_TURBINE__WATER_STARTING_TIME:
				setWaterStartingTime((Seconds)null);
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_RATE_LIMIT:
				return gateRateLimit != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__GATE_UPPER_LIMIT:
				return gateUpperLimit != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__MAX_HEAD_MAX_P:
				return maxHeadMaxP != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__MIN_HEAD_MAX_P:
				return minHeadMaxP != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_RATING:
				return speedRating != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__SPEED_REGULATION:
				return speedRegulation != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_DROOP_TIME:
				return transientDroopTime != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TRANSIENT_REGULATION:
				return transientRegulation != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_RATING:
				return turbineRating != null;
			case GenerationDynamicsPackage.HYDRO_TURBINE__TURBINE_TYPE:
				return turbineType != TURBINE_TYPE_EDEFAULT;
			case GenerationDynamicsPackage.HYDRO_TURBINE__WATER_STARTING_TIME:
				return waterStartingTime != null;
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (turbineType: ");
		result.append(turbineType);
		result.append(')');
		return result.toString();
	}

} //HydroTurbineImpl
